from PIL import Image


def rgb888_to_rgb565(r, g, b):
    """将 RGB888 格式转换为 RGB565 格式"""
    return ((r & 0xF8) << 8) | ((g & 0xFC) << 3) | (b >> 3)


def convert_image_to_rgb565(image_path, output_path):
    """将 JPG 图片转换为 RGB565 格式，并保存到文件"""
    # 打开图像
    img = Image.open(image_path)

    # 将图像转换为RGB模式
    img = img.convert("RGB")

    # 获取图像的宽度和高度
    width, height = img.size

    # 创建RGB565格式的字节数组
    rgb565_data = []

    # 遍历图片的每一个像素，将RGB888转换为RGB565
    for y in range(height):
        for x in range(width):
            r, g, b = img.getpixel((x, y))
            rgb565 = rgb888_to_rgb565(r, g, b)
            # 将RGB565的高字节和低字节保存
            rgb565_data.append((rgb565 >> 8) & 0xFF)  # 高字节
            rgb565_data.append(rgb565 & 0xFF)         # 低字节

    # 将 RGB565 数据写入二进制文件
    with open(output_path, "wb") as f:
        f.write(bytearray(rgb565_data))

    print(f"转换完成！RGB565格式的图片已保存到 {output_path}")


# 示例使用
input_image = "demo.jpg"  # 输入的 JPG 图片路径
output_file = "output.rgb565"  # 输出的 RGB565 文件路径
convert_image_to_rgb565(input_image, output_file)
